home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Other Langs / Parallaxis_20 / rot.z < prev    next >
Text File  |  1991-05-02  |  7KB  |  214 lines

  1. START
  2. 16 PE
  3. 4 PORTS
  4. SCALAR     I4 4( I4 ) I4 B1
  5. VECTOR     I2 I5 B3
  6.     1  :    GOTO 22;
  7.     2  :    PROC 1 VECTOR I1;
  8.         POPV VI1:1;
  9.         VI[VI1:1] := 0;
  10.         PUSHV VI1:1;
  11.         RETURN;
  12.     3  :    PROC 1;
  13.         ERROR "value out of range";
  14.         RETURN;
  15.     4  :    PROC 1;
  16.         ERROR "division by 0";
  17.         RETURN;
  18.     5  :    PROC 1
  19.         SCALAR    
  20.         VECTOR     I3 I1; group number 1
  21.         PUSHV ADDR VI1:3;
  22.     6  :    VI1:1 := ID - 1; for PIC calculating DIMi
  23.         VI1:2 := VI1:1 MOD 4;      DIM2
  24.         VI1:1 := VI1:1 / 4;      DIM1
  25.     7  :    VI1:3 := VI1:1 * 4;
  26.     8  :    VI1:4 := VI1:2 + 1;
  27.     9  :    VI1:3 := VI1:3 + VI1:4;
  28.         VI1:3 := VI1:3 + 1;
  29.         IF VI1:1 < 0 CALL 2;
  30.         IF VI1:1 > 3 CALL 2;
  31.         IF VI1:4 < 0 CALL 2;
  32.         IF VI1:4 > 3 CALL 2;
  33.         CONNECT 1 TO 2 AT VI1:3;
  34.    10  :    VI1:3 := VI1:1 * 4;
  35.    11  :    VI1:4 := VI1:2 - 1;
  36.    12  :    VI1:3 := VI1:3 + VI1:4;
  37.         VI1:3 := VI1:3 + 1;
  38.         IF VI1:1 < 0 CALL 2;
  39.         IF VI1:1 > 3 CALL 2;
  40.         IF VI1:4 < 0 CALL 2;
  41.         IF VI1:4 > 3 CALL 2;
  42.         CONNECT 2 TO 1 AT VI1:3;
  43.    13  :    VI1:4 := VI1:1 + 1;
  44.    14  :    VI1:3 := VI1:4 * 4;
  45.    15  :    VI1:3 := VI1:3 + VI1:2;
  46.         VI1:3 := VI1:3 + 1;
  47.         IF VI1:4 < 0 CALL 2;
  48.         IF VI1:4 > 3 CALL 2;
  49.         IF VI1:2 < 0 CALL 2;
  50.         IF VI1:2 > 3 CALL 2;
  51.         CONNECT 3 TO 4 AT VI1:3;
  52.    16  :    VI1:4 := VI1:1 - 1;
  53.    17  :    VI1:3 := VI1:4 * 4;
  54.    18  :    VI1:3 := VI1:3 + VI1:2;
  55.         VI1:3 := VI1:3 + 1;
  56.         IF VI1:4 < 0 CALL 2;
  57.         IF VI1:4 > 3 CALL 2;
  58.         IF VI1:2 < 0 CALL 2;
  59.         IF VI1:2 > 3 CALL 2;
  60.         CONNECT 4 TO 3 AT VI1:3;
  61.    19  :    POPV VI1:3;
  62.    20  :    RETURN;    group number : 1
  63.    21  :    PROC 1;    configuration : PIC
  64.         VI0:1 := ID - 1; for PIC calculating DIMi
  65.         VI0:2 := VI0:1 MOD 4;      DIM2
  66.         VI0:1 := VI0:1 / 4;      DIM1
  67.         RETURN;    configuration : PIC
  68.    22  :    CALL 5;    connections
  69.    23!20  :    SI0:1 := 4; line 20 column 2 
  70.    24!22  :    SI0:3 := 1; line 22 column 2 
  71.    25  :    SI0:21 := 4;
  72.    26!22  :    IF SI0:3 > SI0:21 GOTO 44; line 22 column 2 
  73.    27!23  :    SI0:4 := 1; line 23 column 4 
  74.    28  :    SI0:22 := 4;
  75.    29!23  :    IF SI0:4 > SI0:22 GOTO 42; line 23 column 4 
  76.    30!24  :    IF SI0:3 < 1 CALL 3; line 24 column 6 
  77.    31  :    IF 4 < SI0:3 CALL 3;
  78.    32  :    IF SI0:4 < 1 CALL 3;
  79.    33  :    IF 4 < SI0:4 CALL 3;
  80.    34  :    SI0:23 := ADDR SI0:5 - SIZE( I4 I1 );
  81.    35  :    SI0:24 := SI0:4 * SIZE( I1 );
  82.    36  :    SI0:23 := SI0:23 + SI0:24;
  83.    37  :    SI0:24 := SI0:3 * SIZE( I4 );
  84.    38  :    SI0:23 := SI0:23 + SI0:24;
  85.    39  :    SI[SI0:23] := 0;
  86.    40  :    SI0:4 := SI0:4 + 1;
  87.    41  :    GOTO 29;
  88.    42  :    SI0:3 := SI0:3 + 1;
  89.    43  :    GOTO 26;
  90.    44!27  :    SI0:3 := 1; line 27 column 2 
  91.    45  :    SI0:21 := 4;
  92.    46!27  :    IF SI0:3 > SI0:21 GOTO 59; line 27 column 2 
  93.    47!27  :    IF SI0:3 < 1 CALL 3; line 27 column 24 
  94.    48  :    IF 4 < SI0:3 CALL 3;
  95.    49  :    IF SI0:3 < 1 CALL 3;
  96.    50  :    IF 4 < SI0:3 CALL 3;
  97.    51  :    SI0:22 := ADDR SI0:5 - SIZE( I4 I1 );
  98.    52  :    SI0:23 := SI0:3 * SIZE( I1 );
  99.    53  :    SI0:22 := SI0:22 + SI0:23;
  100.    54  :    SI0:23 := SI0:3 * SIZE( I4 );
  101.    55  :    SI0:22 := SI0:22 + SI0:23;
  102.    56  :    SI[SI0:22] := SI0:3;
  103.    57  :    SI0:3 := SI0:3 + 1;
  104.    58  :    GOTO 46;
  105.    59!30  :    CALL 21; line 30 column 2 
  106.    60  :    LOAD VI0:3 WITH SI0:5;
  107.    61  :    GOTO 164; line 32 column 2 
  108.    62!33  :    SI0:2 := SI0:1 / 2; line 33 column 4 
  109.    63!34  :    CALL 21; line 34 column 4 
  110.    64!35  :    IF SI0:1 = 0 CALL 4; line 35 column 6 
  111.    65  :    VI0:7 := VI0:1 MOD SI0:1;
  112.    66!36  :    IF SI0:1 = 0 CALL 4; line 36 column 6 
  113.    67  :    VI0:6 := VI0:2 MOD SI0:1;
  114.    68!38  :    VI0:4 := VI0:3; line 38 column 6 
  115.    69!39  :    VB0:1 := VI0:6 < SI0:2; line 39 column 6 
  116.    70  :    VB0:2 := TRUE;
  117.    71  :    IF VB0:1 CALL 88;
  118.    72  :    IF VB0:2 CALL 74;
  119.    73  :    GOTO 103;
  120.    74  :    PROC 1;
  121.    75!41  :    IF SI0:2 > 0 GOTO 77; line 41 column 24 
  122.    76  :    ERROR "number must be positive";
  123.    77  :    SI0:21 := 0;
  124.    78  :    PROPAGATE VI0:4 OUT 4 IN 3;
  125.    79  :    SI0:21 := SI0:21 + 1;
  126.    80  :    IF SI0:21 < SI0:2 GOTO 78;
  127.    81!42  :    VB0:1 := VI0:7 < SI0:2; line 42 column 24 
  128.    82  :    IF VB0:1 CALL 84;
  129.    83  :    GOTO 87;
  130.    84  :    PROC 1;
  131.    85!42  :    VI0:5 := VI0:4; line 42 column 41 
  132.    86  :    RETURN;
  133.    87  :    RETURN;
  134.    88  :    PROC 1;
  135.    89  :    VB0:2 := FALSE;
  136.    90!39  :    IF SI0:2 > 0 GOTO 92; line 39 column 24 
  137.    91  :    ERROR "number must be positive";
  138.    92  :    SI0:21 := 0;
  139.    93  :    PROPAGATE VI0:4 OUT 3 IN 4;
  140.    94  :    SI0:21 := SI0:21 + 1;
  141.    95  :    IF SI0:21 < SI0:2 GOTO 93;
  142.    96!40  :    VB0:3 := VI0:7 >= SI0:2; line 40 column 24 
  143.    97  :    IF VB0:3 CALL 99;
  144.    98  :    GOTO 102;
  145.    99  :    PROC 1;
  146.   100!40  :    VI0:5 := VI0:4; line 40 column 41 
  147.   101  :    RETURN;
  148.   102  :    RETURN;
  149.   103!45  :    VI0:4 := VI0:3; line 45 column 6 
  150.   104!46  :    VB0:2 := VI0:7 < SI0:2; line 46 column 6 
  151.   105  :    VB0:1 := TRUE;
  152.   106  :    IF VB0:2 CALL 123;
  153.   107  :    IF VB0:1 CALL 109;
  154.   108  :    GOTO 138;
  155.   109  :    PROC 1;
  156.   110!48  :    IF SI0:2 > 0 GOTO 112; line 48 column 24 
  157.   111  :    ERROR "number must be positive";
  158.   112  :    SI0:21 := 0;
  159.   113  :    PROPAGATE VI0:4 OUT 1 IN 2;
  160.   114  :    SI0:21 := SI0:21 + 1;
  161.   115  :    IF SI0:21 < SI0:2 GOTO 113;
  162.   116!49  :    VB0:2 := VI0:6 >= SI0:2; line 49 column 24 
  163.   117  :    IF VB0:2 CALL 119;
  164.   118  :    GOTO 122;
  165.   119  :    PROC 1;
  166.   120!49  :    VI0:5 := VI0:4; line 49 column 41 
  167.   121  :    RETURN;
  168.   122  :    RETURN;
  169.   123  :    PROC 1;
  170.   124  :    VB0:1 := FALSE;
  171.   125!46  :    IF SI0:2 > 0 GOTO 127; line 46 column 24 
  172.   126  :    ERROR "number must be positive";
  173.   127  :    SI0:21 := 0;
  174.   128  :    PROPAGATE VI0:4 OUT 2 IN 1;
  175.   129  :    SI0:21 := SI0:21 + 1;
  176.   130  :    IF SI0:21 < SI0:2 GOTO 128;
  177.   131!47  :    VB0:3 := VI0:6 < SI0:2; line 47 column 24 
  178.   132  :    IF VB0:3 CALL 134;
  179.   133  :    GOTO 137;
  180.   134  :    PROC 1;
  181.   135!47  :    VI0:5 := VI0:4; line 47 column 41 
  182.   136  :    RETURN;
  183.   137  :    RETURN;
  184.   138!52  :    VI0:3 := VI0:5; line 52 column 6 
  185.   139!54  :    SI0:1 := SI0:2; line 54 column 4 
  186.   140!56  :    CALL 21; line 56 column 4 
  187.   141  :    STORE VI0:3 TO SI0:5;
  188.   142!58  :    WRITE EOL; line 58 column 4 
  189.   143!59  :    SI0:3 := 1; line 59 column 4 
  190.   144  :    SI0:21 := 4;
  191.   145!59  :    IF SI0:3 > SI0:21 GOTO 164; line 59 column 4 
  192.   146!60  :    SI0:4 := 1; line 60 column 6 
  193.   147  :    SI0:22 := 4;
  194.   148!60  :    IF SI0:4 > SI0:22 GOTO 161; line 60 column 6 
  195.   149!61  :    IF SI0:3 < 1 CALL 3; line 61 column 8 
  196.   150  :    IF 4 < SI0:3 CALL 3;
  197.   151  :    IF SI0:4 < 1 CALL 3;
  198.   152  :    IF 4 < SI0:4 CALL 3;
  199.   153  :    SI0:23 := ADDR SI0:5 - SIZE( I4 I1 );
  200.   154  :    SI0:24 := SI0:4 * SIZE( I1 );
  201.   155  :    SI0:23 := SI0:23 + SI0:24;
  202.   156  :    SI0:24 := SI0:3 * SIZE( I4 );
  203.   157  :    SI0:23 := SI0:23 + SI0:24;
  204.   158  :    WRITE SI[SI0:23] 2;
  205.   159  :    SI0:4 := SI0:4 + 1;
  206.   160  :    GOTO 148;
  207.   161!63  :    WRITE EOL; line 63 column 6 
  208.   162  :    SI0:3 := SI0:3 + 1;
  209.   163  :    GOTO 145;
  210.   164!32  :    SB0:1 := SI0:1 > 1; line 32 column 2 
  211.   165  :    IF SB0:1 GOTO 62;
  212.   166  :    END;    IMAGE_ROTATION
  213. STOP
  214.